// filter
// Array.prototype.filter1 = function(fn) {
//     let newArray = [];
//     for (let i = 0; i < this.length; i++) {
//         if (fn(this[i])) {
//             newArray.push(this[i]);
//         }
//     }
//     return newArray
// }
// let arr = [1, 2, 3, 45, 6]
// let arr1 = arr.filter1((item) =>
//     item >= 6
// )
// console.log(arr1);


//map
// Array.prototype.map1 = function(fn) {
//     let newArray = [];
//     for (let i = 0; i < this.length; i++) {
//         let key = fn(this[i]);
//         newArray.push(key);
//     }
//     return newArray;
// }



// let arr = [1, 2, 3, 4];
// let arr1 = arr.map1((item) => {
//     return item * 2;
// })
// console.log(arr1);

// reduce 无初始值
Array.prototype.reduce1 = function(fn) {
    let newVal = this[0];
    for (let i = 1; i < this.length; i++) {
        newVal = fn(newVal, this[i], i, arr);
    }
    return newVal
}
let arr = [1, 2, 3, 4, 5]
let resMult = arr.reduce1((value, item, i, arr) => { //value为累计值，item当前值，i当前值索引，arr当前操作的数组
    // console.log(value, item, i, arr)
    return value * item
})
let resAdd = arr.reduce1((value, item, i, arr) => {
    // console.log(value, item, i, arr)
    return value + item
})
console.log(resMult, resAdd) // 120 15

//reduce 有初始值

// Array.prototype.reduce2 = function(fn, ini) {
//     let key = ini ? ini : this[0];
//     for (let i = ini ? 0 : 1; i < this.length; i++) {
//         key = fn(key, this[i], i, arr);
//     }
//     return key;
// }


// let arr = [10, 2, 3, 4, 5];
// let arr2 = arr.reduce2((val, item, i, arr) => {
//     return val + item;
// }, 10)
// let arr3 = arr.reduce2((val, item, i, arr) => {
//     return val * item;
// })
// console.log(arr2, arr3);